#pragma once

#include "map/map.h"

class DungeonMap : public Map
{
private:
    using Map::GetPersistentState;                      // hide in subclass for overwrite
public:
    DungeonMap(unsigned int id, time_t, unsigned int InstanceId);
    ~DungeonMap();
    bool Add(battle::object::Player*) override;
    void Remove(battle::object::Player*, bool) override;
    void Update(const unsigned int&) override;
#if 0
    bool Reset(InstanceResetMethod method);
#endif
    void PermBindAllPlayers(battle::object::Player* player);
    void UnloadAll(bool pForce) override;
    void SendResetWarnings(unsigned int timeLeft) const;
    void SetResetSchedule(bool on);
    unsigned int GetMaxPlayers() const;

#if 0
    unsigned int GetScriptId() const override { return sScriptMgr.GetBoundScriptId(SCRIPTED_INSTANCE, GetId()); }
#endif

    // can't be nullptr for loaded map
    DungeonPersistentState* GetPersistanceState() const;

    virtual void InitVisibilityDistance() override;
private:
    bool m_resetAfterUnload;
    bool m_unloadWhenEmpty;
};